package les.portal.negocio.to;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import les.portal.util.EstadoDeProjeto;

public class EstadoFinalizadoTO extends EstadoProjetoTO {
	
	private String comentarioFinalizado;
	private String download;
	private Set<SubestadoFinalizadoTO> subestadosFinalizado;
	
	
	public EstadoFinalizadoTO(){
		subestadosFinalizado = new TreeSet<SubestadoFinalizadoTO>();
	}
	
	/**
	 * @return Returns the download.
	 */
	public String getDownload() {
		return download;
	}
	
	/**
	 * @param download The download to set.
	 */
	public void setDownload(String download) {
		if (download != null) {
			download = download.trim();
			
			if (download.equals("")) {
				download = null;
			}
		}
		
		this.download = download;
	}
	
	/**
	 * @return Returns the subestadosFinalizado.
	 */
	public Set<SubestadoFinalizadoTO> getSubestadosFinalizado() {
		return subestadosFinalizado;
	}
	/**
	 * @param subestadosFinalizado The subestadosFinalizado to set.
	 */
	public void setSubestadosFinalizado(
			Set<SubestadoFinalizadoTO> subestadosFinalizado) {
		this.subestadosFinalizado = subestadosFinalizado;
	}
	@Override
	public EstadoDeProjeto getEstadoDeProjeto() {
		
		return EstadoDeProjeto.Finalizado;
	}
	
	public void adicionaSubestadoFinalizado(SubestadoFinalizadoTO subestadoTO) {
		subestadosFinalizado.add(subestadoTO);		
		
	}
	
	public SubestadoFinalizadoTO getUltimoSubestado() {
		
		if (this.subestadosFinalizado.size() == 0) {
			return null;
		}
		
		LinkedList<SubestadoFinalizadoTO> lista = new LinkedList<SubestadoFinalizadoTO>(this.subestadosFinalizado);
		Collections.sort(lista);
		
		return lista.getLast();
	}
	
	public boolean hasSubestados() {
		return this.subestadosFinalizado.size() != 0;
	}

	public String getComentarioFinalizado() {
		return comentarioFinalizado;
	}

	public void setComentarioFinalizado(String comentarioFinalizado) {
		if (comentarioFinalizado == null) {
			comentarioFinalizado = "";
		}
		
		this.comentarioFinalizado = comentarioFinalizado.trim();
	}
	
	/**
	 * @return
	 */
	public List<SubestadoFinalizadoTO> getSubestadosOrdenados() {
		
		List<SubestadoFinalizadoTO> lista = new ArrayList<SubestadoFinalizadoTO>(this.subestadosFinalizado);
		Collections.sort(lista);
		
		return lista;
	}
	
}